home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / qb2 / pro15 / grafix.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-08-20  |  14.7 KB  |  687 lines

  1. {
  2.   Procedures interface unit file for QuickPASCAL/Turbo PASCAL
  3. }
  4.  
  5. UNIT    Grafix;
  6.  
  7. INTERFACE
  8.  
  9. USES
  10.   Crt;
  11.  
  12. CONST
  13.   PutPreset = 1;
  14.   PutPset = 2;
  15.   PutAnd = 3;
  16.   PutOr = 4;
  17.   PutXor = 5;
  18.  
  19. PROCEDURE Animate(X, Y, Speed: WORD; VAR Image: WORD);
  20. PROCEDURE AudioOff;
  21. PROCEDURE BLoad(FileName: STRING; VAR BLoadArea: WORD);
  22. PROCEDURE ClearKey;
  23. PROCEDURE ClearScreen;
  24. PROCEDURE ColorEnable(Action: WORD);
  25. PROCEDURE ColorOff;
  26. PROCEDURE ColorOn;
  27. PROCEDURE CurrentPoint(VAR X, Y: WORD);
  28. PROCEDURE CursorAction(Action: WORD);
  29. PROCEDURE CursorOff;
  30. PROCEDURE CursorOn;
  31. PROCEDURE CursorStatus(VAR Status, CursorSize:    WORD);
  32. PROCEDURE DrawBox( X1, Y1, X2, Y2, Color: WORD);
  33. PROCEDURE DrawBoxC(X1, Y1, X2, Y2: WORD);
  34. PROCEDURE ExitGraphics;
  35. PROCEDURE Ellipse(X, Y, A, B: WORD);
  36. PROCEDURE EllipseC(X, Y, A, B, Color: WORD);
  37. PROCEDURE ExtCircle( X, Y, Radius: WORD);
  38. PROCEDURE ExtCircleC(X, Y, Radius, Color: WORD);
  39. PROCEDURE ExtGet(X1, Y1, X2, Y2: WORD; VAR Image: WORD);
  40. PROCEDURE ExtLine(X1, Y1, X2, Y2: WORD);
  41. PROCEDURE ExtLineC(X1, Y1, X2, Y2, Color: WORD);
  42. PROCEDURE ExtPaint( X, Y, Fill, Boundry: WORD);
  43. PROCEDURE ExtPut(X, Y: WORD; VAR Image: WORD; Action: WORD);
  44. PROCEDURE ExtSound(Frequency, Duration, Volume, Channel: WORD);
  45. PROCEDURE FillBox(X1, Y1, X2, Y2, Color: WORD);
  46. PROCEDURE FillBoxC(X1, Y1, X2, Y2: WORD);
  47. PROCEDURE GetAspect(VAR XAspect, YAspect: WORD);
  48. PROCEDURE GetBackColor(VAR BackColor: WORD);
  49. FUNCTION  GetColor(ColorType: WORD): WORD;
  50. PROCEDURE GetCursor(VAR Row, Column: WORD);
  51. PROCEDURE GetInput(Prompt: STRING; VAR GS: STRING);
  52. PROCEDURE GetPlotColor(VAR PlotColor: WORD);
  53. PROCEDURE GetScreen(VAR Image: WORD);
  54. FUNCTION  GetSystem(Action: WORD): WORD;
  55. PROCEDURE GetTandy11(VAR Tandy11: BOOLEAN);
  56. PROCEDURE GetTextColor(VAR TextColor: WORD);
  57. PROCEDURE GetView(VAR MinX, MinY, MaxX, MaxY: WORD);
  58. PROCEDURE GraphStatus(VAR Status: WORD);
  59. PROCEDURE HalfCursor;
  60. PROCEDURE HighGraphics;
  61. FUNCTION  Left(S: STRING; L: WORD): STRING;
  62. PROCEDURE LineRel(X, Y: WORD);
  63. PROCEDURE LineRelC(X, Y, Color: WORD);
  64. PROCEDURE LineTo(X, Y: WORD);
  65. PROCEDURE LineToC(X, Y, Color: WORD);
  66. PROCEDURE LowGraphics;
  67. PROCEDURE MediumGraphics;
  68. FUNCTION  Mid(S: STRING; P, L: WORD): STRING;
  69. PROCEDURE MoveRel(X, Y: WORD);
  70. PROCEDURE MoveTo(X, Y: WORD);
  71. PROCEDURE Noise(NoiseType, Volume, Duration: WORD);
  72. PROCEDURE NoiseBufOff;
  73. PROCEDURE NoiseBufOn;
  74. PROCEDURE NoiseOff;
  75. PROCEDURE NormalCursor;
  76. PROCEDURE PaletteUsing(VAR PalArray: WORD);
  77. PROCEDURE Pause(Duration: WORD);
  78. PROCEDURE PointColor(X, Y: WORD; VAR Color: WORD);
  79. PROCEDURE PlotPoint(X, Y: WORD);
  80. PROCEDURE PlotPointC(X, Y, Color: WORD);
  81. PROCEDURE PrintString(GraphString: STRING);
  82. PROCEDURE PrintStringX(GraphString: STRING);
  83. PROCEDURE PrintStringA(Action, Strlen: WORD; VAR GraphString: STRING);
  84. PROCEDURE PutScreen(VAR Image: WORD);
  85. PROCEDURE ResetPalette;
  86. PROCEDURE ResetView;
  87. FUNCTION  Right(S: STRING; L: WORD): STRING;
  88. PROCEDURE SetAspect(XAspect, YASpect: WORD);
  89. PROCEDURE SetBackColor(BackColor: WORD);
  90. PROCEDURE SetColor(ColorType, Color: WORD);
  91. PROCEDURE SetCursor(Row, Column: WORD);
  92. PROCEDURE SetPalette(PalReg, Color: WORD);
  93. PROCEDURE SetPlotColor(PlotColor: WORD);
  94. PROCEDURE SetSystem(Action: WORD);
  95. PROCEDURE SetTextColor(TextColor: WORD);
  96. PROCEDURE SetView(MinX, MinY, MaxX, MaxY: WORD);
  97. PROCEDURE SoundBufOff;
  98. PROCEDURE SoundBufOn;
  99. PROCEDURE SoundOff;
  100. PROCEDURE SpeakerOff;
  101. PROCEDURE SpeakerOn;
  102. PROCEDURE WaitKey;
  103. PROCEDURE XorCircle(X, Y, Radius: WORD);
  104. PROCEDURE XorCircleC(X, Y, Radius, Color: WORD);
  105. PROCEDURE XorDrawBox(X1, Y1, X2, Y2, Color: WORD);
  106. PROCEDURE XorDrawBoxC(X1, Y1, X2, Y2: WORD);
  107. PROCEDURE XorEllipse(X, Y, A, B: WORD);
  108. PROCEDURE XorEllipseC(X, Y, A, B, Color: WORD);
  109. PROCEDURE XorFillBox(X1, Y1, X2, Y2, Color: WORD);
  110. PROCEDURE XorFillBoxC(X1, Y1, X2, Y2: WORD);
  111. PROCEDURE XorLine(X1, Y1, X2, Y2: WORD);
  112. PROCEDURE XorLineC(X1, Y1, X2, Y2, Color: WORD);
  113. PROCEDURE XorLineRel(X, Y: WORD);
  114. PROCEDURE XorLineRelC(X, Y, Color: WORD);
  115. PROCEDURE XorLineTo(X, Y: WORD);
  116. PROCEDURE XorLineToC(X, Y, Color: WORD);
  117. PROCEDURE XorPoint(X, Y: WORD);
  118. PROCEDURE XorPointC(X, Y: WORD);
  119. PROCEDURE SetDisplayPage(Page: WORD);
  120. PROCEDURE GetDisplayPage(VAR Page: WORD);
  121. PROCEDURE SetActivePage(Page: WORD);
  122. PROCEDURE GetActivePage(VAR Page: WORD);
  123. PROCEDURE PageCopy(Source, Destination: WORD);
  124. PROCEDURE FastTimer(Speed: WORD);
  125. PROCEDURE ResetTimer;
  126. PROCEDURE GetTimer(VAR TimerValue: WORD);
  127.  
  128. IMPLEMENTATION
  129.  
  130. {$L GRAFPAS.OBJ}
  131.  
  132. PROCEDURE Animate(X, Y, Speed: WORD; VAR Image: WORD);    EXTERNAL;
  133. PROCEDURE ClearScreen;EXTERNAL;
  134. PROCEDURE ColorEnable(Action: WORD);  EXTERNAL;
  135. PROCEDURE CurrentPoint(VAR X, Y: WORD);  EXTERNAL;
  136. PROCEDURE CursorAction(Action: WORD);  EXTERNAL;
  137. PROCEDURE CursorStatus(VAR Status, CursorSize:    WORD);    EXTERNAL;
  138. PROCEDURE DrawBox( X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  139. PROCEDURE DrawBoxC(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  140. PROCEDURE Ellipse(X, Y, A, B: WORD);  EXTERNAL;
  141. PROCEDURE EllipseC(X, Y, A, B, Color: WORD);  EXTERNAL;
  142. PROCEDURE ExtCircle( X, Y, Radius: WORD);  EXTERNAL;
  143. PROCEDURE ExtCircleC(X, Y, Radius, Color: WORD);  EXTERNAL;
  144. PROCEDURE ExtGet(X1, Y1, X2, Y2: WORD; VAR Image: WORD);  EXTERNAL;
  145. PROCEDURE ExtLine(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  146. PROCEDURE ExtLineC(X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  147. PROCEDURE ExtPaint( X, Y, Fill, Boundry: WORD);  EXTERNAL;
  148. PROCEDURE ExtPut(X, Y: WORD; VAR Image: WORD; Action: WORD);  EXTERNAL;
  149. PROCEDURE ExtSound(Frequency, Duration, Volume, Channel: WORD);  EXTERNAL;
  150. PROCEDURE FastTimer(Speed: WORD); EXTERNAL;
  151. PROCEDURE FillBox(X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  152. PROCEDURE FillBoxC(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  153. PROCEDURE GetActivePage(VAR Page: WORD); EXTERNAL;
  154. PROCEDURE GetAspect(VAR XAspect, YAspect: WORD);  EXTERNAL;
  155. FUNCTION  GetColor(ColorType: WORD): WORD;EXTERNAL;
  156. PROCEDURE GetCursor(VAR Row, Column: WORD);  EXTERNAL;
  157. PROCEDURE GetDisplayPage(VAR Page: WORD); EXTERNAL;
  158. PROCEDURE GetScreen(VAR Image: WORD); EXTERNAL;
  159. FUNCTION  GetSystem(Action: WORD): WORD;EXTERNAL;
  160. PROCEDURE GetTimer(VAR TimerValue: WORD); EXTERNAL;
  161. PROCEDURE GetView(VAR MinX, MinY, MaxX, MaxY: WORD);  EXTERNAL;
  162. PROCEDURE LineRel(X, Y: WORD);    EXTERNAL;
  163. PROCEDURE LineRelC(X, Y, Color: WORD);    EXTERNAL;
  164. PROCEDURE LineTo(X, Y: WORD);  EXTERNAL;
  165. PROCEDURE LineToC(X, Y, Color: WORD);  EXTERNAL;
  166. PROCEDURE MoveRel(X, Y: WORD);    EXTERNAL;
  167. PROCEDURE MoveTo(X, Y: WORD);  EXTERNAL;
  168. PROCEDURE Noise(NoiseType, Volume, Duration: WORD);  EXTERNAL;
  169. PROCEDURE PageCopy(Source, Destination: WORD); EXTERNAL;
  170. PROCEDURE PaletteUsing(VAR PalArray: WORD);  EXTERNAL;
  171. PROCEDURE Pause(Duration: WORD);  EXTERNAL;
  172. PROCEDURE PointColor(X, Y: WORD; VAR Color: WORD);  EXTERNAL;
  173. PROCEDURE PlotPoint(X, Y: WORD);  EXTERNAL;
  174. PROCEDURE PlotPointC(X, Y, Color: WORD);  EXTERNAL;
  175. PROCEDURE PrintStringA(Action, Strlen: WORD; VAR GraphString: STRING);    EXTERNAL;
  176. PROCEDURE PutScreen(VAR Image: WORD); EXTERNAL;
  177. PROCEDURE ResetPalette;EXTERNAL;
  178. PROCEDURE ResetTimer; EXTERNAL;
  179. PROCEDURE ResetView;EXTERNAL;
  180. PROCEDURE SetActivePage(Page: WORD); EXTERNAL;
  181. PROCEDURE SetAspect(XAspect, YASpect: WORD);  EXTERNAL;
  182. PROCEDURE SetColor(ColorType, Color: WORD);  EXTERNAL;
  183. PROCEDURE SetCursor(Row, Column: WORD);  EXTERNAL;
  184. PROCEDURE SetDisplayPage(Page: WORD); EXTERNAL;
  185. PROCEDURE SetPalette(PalReg, Color: WORD);  EXTERNAL;
  186. PROCEDURE SetSystem(Action: WORD);  EXTERNAL;
  187. PROCEDURE SetView(MinX, MinY, MaxX, MaxY: WORD);  EXTERNAL;
  188. PROCEDURE SpeakerOff;EXTERNAL;
  189. PROCEDURE SpeakerOn;EXTERNAL;
  190. PROCEDURE XorCircle(X, Y, Radius: WORD);  EXTERNAL;
  191. PROCEDURE XorCircleC(X, Y, Radius, Color: WORD);  EXTERNAL;
  192. PROCEDURE XorDrawBox(X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  193. PROCEDURE XorDrawBoxC(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  194. PROCEDURE XorEllipse(X, Y, A, B: WORD);  EXTERNAL;
  195. PROCEDURE XorEllipseC(X, Y, A, B, Color: WORD);  EXTERNAL;
  196. PROCEDURE XorFillBox(X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  197. PROCEDURE XorFillBoxC(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  198. PROCEDURE XorLine(X1, Y1, X2, Y2: WORD);  EXTERNAL;
  199. PROCEDURE XorLineC(X1, Y1, X2, Y2, Color: WORD);  EXTERNAL;
  200. PROCEDURE XorLineRel(X, Y: WORD);  EXTERNAL;
  201. PROCEDURE XorLineRelC(X, Y, Color: WORD);  EXTERNAL;
  202. PROCEDURE XorLineTo(X, Y: WORD);  EXTERNAL;
  203. PROCEDURE XorLineToC(X, Y, Color: WORD);  EXTERNAL;
  204. PROCEDURE XorPoint(X, Y: WORD);  EXTERNAL;
  205. PROCEDURE XorPointC(X, Y: WORD);  EXTERNAL;
  206.  
  207. PROCEDURE AudioOff;
  208.  
  209. BEGIN
  210.  
  211.   SetSystem(10);
  212.  
  213. END;
  214.  
  215. PROCEDURE ColorOff;
  216.  
  217. BEGIN
  218.  
  219.   ColorEnable(0);
  220.  
  221. END;
  222.  
  223. PROCEDURE ColorOn;
  224.  
  225. BEGIN
  226.  
  227.   ColorEnable(1);
  228.  
  229. END;
  230.  
  231. PROCEDURE CursorOff;
  232.  
  233. BEGIN
  234.  
  235.   CursorAction(0);
  236.  
  237. END;
  238.  
  239. PROCEDURE CursorOn;
  240.  
  241. BEGIN
  242.  
  243.   CursorAction(1);
  244.  
  245. END;
  246.  
  247. PROCEDURE LowGraphics;
  248.  
  249. BEGIN
  250.  
  251.    IF GetSystem(0) <> $DEAD THEN
  252.      BEGIN
  253.        WriteLn('GRAFIX Driver Not Loaded');
  254.        Halt(1);
  255.      END
  256.    ELSE
  257.      SetSystem(13);
  258.  
  259. END;
  260.  
  261. PROCEDURE MediumGraphics;
  262.  
  263. BEGIN
  264.  
  265.    IF GetSystem(0) <> $DEAD THEN
  266.      BEGIN
  267.        WriteLn('GRAFIX Driver Not Loaded');
  268.        Halt(1);
  269.      END
  270.    ELSE
  271.      SetSystem(2);
  272.  
  273. END;
  274.  
  275. PROCEDURE HighGraphics;
  276.  
  277. VAR
  278.   Tandy11: BOOLEAN;
  279.  
  280. BEGIN
  281.  
  282.    IF GetSystem(0) <> $DEAD THEN
  283.      BEGIN
  284.        WriteLn('GRAFIX Driver Not Loaded');
  285.        Halt(1);
  286.      END;
  287.     GetTandy11(Tandy11);
  288.     IF Tandy11 = False THEN
  289.       BEGIN
  290.     WriteLn('TANDY11 Driver For 640x200x16 Color Graphics Mode Not Loaded');
  291.     Halt(1);
  292.       END
  293.      ELSE
  294.        SetSystem(11);
  295.  
  296. END;
  297.  
  298.  
  299. PROCEDURE ExitGraphics;
  300.  
  301. BEGIN
  302.  
  303.   SetSystem(3);
  304.  
  305. END;
  306.  
  307. PROCEDURE GetBackColor(VAR BackColor: WORD);
  308.  
  309. BEGIN
  310.  
  311.   BackColor := GetColor(3);
  312.  
  313. END;
  314.  
  315. PROCEDURE GetPlotColor(VAR PlotColor: WORD);
  316.  
  317. BEGIN
  318.  
  319.   PlotColor := GetColor(1);
  320.  
  321. END;
  322.  
  323. PROCEDURE GetTextColor(VAR TextColor: WORD);
  324.  
  325. BEGIN
  326.  
  327.   TextColor := GetColor(2);
  328.  
  329. END;
  330.  
  331. PROCEDURE GraphStatus(VAR Status: WORD);
  332.  
  333. BEGIN
  334.  
  335.   Status := GetSystem(1);
  336.  
  337. END;
  338.  
  339. PROCEDURE HalfCursor;
  340.  
  341. BEGIN
  342.  
  343.   CursorAction(3);
  344.  
  345. END;
  346.  
  347. PROCEDURE NoiseBufOff;
  348.  
  349. BEGIN
  350.  
  351.   SetSystem(9);
  352.  
  353. END;
  354.  
  355. PROCEDURE NoiseBufOn;
  356.  
  357. BEGIN
  358.  
  359.   SetSystem(8);
  360.  
  361. END;
  362.  
  363. PROCEDURE NoiseOff;
  364.  
  365. BEGIN
  366.  
  367.   SetSystem(7);
  368.  
  369. END;
  370.  
  371. PROCEDURE NormalCursor;
  372.  
  373. BEGIN
  374.  
  375.   CursorAction(2);
  376.  
  377. END;
  378.  
  379.  
  380. PROCEDURE SetBackColor(BackColor: WORD);
  381.  
  382. BEGIN
  383.  
  384.  
  385.   SetColor(3, BackColor);
  386.  
  387. END;
  388.  
  389. PROCEDURE SetPlotColor(PlotColor: WORD);
  390.  
  391. BEGIN
  392.  
  393.  
  394.   SetColor(1, PlotColor);
  395.  
  396. END;
  397.  
  398. PROCEDURE SetTextColor(TextColor: WORD);
  399.  
  400. BEGIN
  401.  
  402.  
  403.   SetColor(2, TextColor);
  404.  
  405. END;
  406.  
  407.  
  408. PROCEDURE SoundBufOff;
  409.  
  410. BEGIN
  411.  
  412.   SetSystem(6)
  413.  
  414. END;
  415.  
  416. PROCEDURE SoundBufOn;
  417.  
  418. BEGIN
  419.  
  420.   SetSystem(5)
  421.  
  422. END;
  423.  
  424. PROCEDURE SoundOff;
  425.  
  426. BEGIN
  427.  
  428.   SetSystem(4)
  429.  
  430. END;
  431.  
  432. PROCEDURE ClearKey;
  433.  
  434. VAR
  435.   Ch: CHAR;
  436.  
  437. BEGIN
  438.  
  439.   WHILE KeyPressed DO
  440.     Ch := ReadKey;
  441.  
  442. END; {ClearKey}
  443.  
  444. PROCEDURE WaitKey;
  445.  
  446. VAR
  447.   Ch: CHAR;
  448.  
  449. BEGIN
  450.  
  451.   ClearKey;
  452.   REPEAT
  453.   UNTIL KeyPressed;
  454.   Ch := ReadKey;
  455.  
  456. END; {WaitKey}
  457.  
  458. PROCEDURE BLoad(FileName: STRING; VAR BLoadArea: WORD);
  459.  
  460. VAR
  461.    LoadFile: FILE;
  462.    Count: WORD;
  463.    Buffer: ARRAY [1..7] OF BYTE;
  464.  
  465. BEGIN
  466.  
  467.   Assign(LoadFile, FileName);
  468.   Reset(LoadFile, 7);
  469.   IF IOResult <> 0 THEN
  470.     BEGIN
  471.       ExitGraphics;
  472.       WriteLn('File "', FileName, '" Not Found');
  473.       Halt(1);
  474.     END;
  475.   BlockRead(LoadFile, Buffer, 1, Count);
  476.   BlockRead(LoadFile, BLoadArea, FileSize(LoadFile) - 1, Count);
  477.   Close(LoadFile);
  478.  
  479. END;
  480.  
  481. PROCEDURE PrintString(GraphString: STRING);
  482.  
  483. BEGIN
  484.  
  485.    PrintStringA(1, Length(GraphString), GraphString);
  486.  
  487. END;
  488.  
  489. PROCEDURE PrintStringX(GraphString: STRING);
  490.  
  491. BEGIN
  492.  
  493.    PrintStringA(0, Length(GraphString), GraphString);
  494.  
  495. END;
  496.  
  497. FUNCTION Left(S: STRING; L: WORD): STRING;
  498.  
  499. BEGIN
  500.  
  501.   Left := Copy(S, 1, L);
  502.  
  503. END;
  504.  
  505. FUNCTION Right(S: STRING; L: WORD): STRING;
  506.  
  507. BEGIN
  508.  
  509.   Right := Copy(S, Length(S) - L + 1, L);
  510.  
  511. END;
  512.  
  513. FUNCTION Mid(S: STRING; P, L: WORD): STRING;
  514.  
  515. BEGIN
  516.  
  517.   Mid := Copy(S, P, L);
  518.  
  519. END;
  520.  
  521. PROCEDURE GetInput (Prompt: STRING; VAR GS: STRING);
  522.  
  523. VAR
  524.   SaveCursor, SaveSize, I, P, R, StartCol, Max, Insert, WhatToDo: WORD;
  525.   Tandy11: BOOLEAN;
  526.   K, L: CHAR;
  527.   Temp, Work: STRING[80];
  528.  
  529.  
  530. BEGIN
  531.   CursorStatus(SaveCursor, SaveSize);
  532.   CursorOn;
  533.   NormalCursor;
  534.   PrintStringX(Prompt);
  535.   GetCursor(R, StartCol);
  536.   GetTandy11(Tandy11);
  537.   IF (Tandy11 = True) THEN
  538.     Max := (80 - StartCol + 1)
  539.   ELSE
  540.     Max := (40 - StartCol + 1);
  541.   P := 1;
  542.   Insert := 0;
  543.   FOR I := 1 TO Max DO
  544.     Temp[I] := ' ';
  545.   Temp[0] := Chr(Max);
  546.   ClearKey;
  547.   REPEAT
  548.     REPEAT
  549.     UNTIL KeyPressed;
  550.     L :=  ReadKey;
  551.     IF L = #00 THEN
  552.       K := ReadKey
  553.     ELSE
  554.       K := L;
  555.     WhatToDo := 0;
  556.     IF L <> #00 THEN
  557.       CASE K OF
  558.     #08: {Back Space}
  559.        BEGIN
  560.          P := P - 1;
  561.          IF P < 1 THEN
  562.         P := 1;
  563.          Temp := Left(Temp, P - 1) + Right(Temp, Length(Temp) - P) + ' ';
  564.          WhatToDo := 2;
  565.        END;
  566.     #27: {Escape}
  567.       BEGIN
  568.         FOR I := 1 TO Max DO
  569.           Temp[I] := ' ';
  570.         Temp[0] := Chr(Max);
  571.         P := 1;
  572.         WhatToDo := 2;
  573.       END;
  574.     #32..#126: {ASCII 32 - 126}
  575.       BEGIN
  576.         IF Insert = 0 THEN
  577.           BEGIN
  578.         Temp[P] := K;
  579.         WhatToDo := 1;
  580.         Inc(P);
  581.         IF P > Max THEN
  582.           BEGIN
  583.             P := 1;
  584.             WhatToDo := 2;
  585.           END;
  586.           END;
  587.         IF Insert = 1 THEN
  588.           BEGIN
  589.         Temp := Left(Temp, P - 1) + K + Mid(Temp, P, Length(Temp) - P);
  590.         Inc(P);
  591.         IF P > Max THEN
  592.           P := 1;
  593.         WhatToDo := 2;
  594.           END;
  595.       END;
  596.       END;
  597.     IF L = #00 THEN
  598.       CASE K OF
  599.     #71: {Home}
  600.       P := 1;
  601.     #75: {Cursor Left}
  602.       BEGIN
  603.         Dec(P);
  604.         IF P < 1 THEN P := 1;
  605.       END;
  606.     #77: {Cursor Right}
  607.       BEGIN
  608.         Inc(P);
  609.         IF P > Max THEN P := Max;
  610.       END;
  611.     #79: {End}
  612.       BEGIN
  613.         I := Max + 1;
  614.         REPEAT
  615.           Dec(I);
  616.         UNTIL Temp[I] <> ' ';
  617.         P := I + 1;
  618.         IF P = Max + 1 THEN P := Max;
  619.       END;
  620.     #82: {Insert}
  621.       BEGIN
  622.         IF Insert = 0 THEN
  623.           BEGIN
  624.         Insert := 1;
  625.         HalfCursor;
  626.           END
  627.         ELSE
  628.           BEGIN
  629.         Insert := 0;
  630.         NormalCursor;
  631.           END;
  632.       END;
  633.     #83: {Delete}
  634.       BEGIN
  635.         Temp := Left(Temp, P - 1) + Right(Temp, Length(Temp) - P) + ' ';
  636.         WhatToDo := 2;
  637.       END;
  638.     END;
  639.     CASE WhatToDo OF
  640.       0: SetCursor(R, (StartCol + P - 1));
  641.       1:
  642.     BEGIN
  643.       SetCursor(R, (StartCol + P - 2));
  644.       PrintStringX(K);
  645.       SetCursor(R, (StartCol + P - 1));
  646.     END;
  647.       2:
  648.     BEGIN
  649.       SetCursor(R, StartCol);
  650.       PrintStringX(Temp);
  651.       SetCursor(R, (StartCol + P - 1));
  652.     END;
  653.     END;
  654.   UNTIL K = #13;
  655.   I := Max + 1;
  656.   REPEAT
  657.     Dec(I);
  658.   UNTIL Temp[I] <> ' ';
  659.   GS := Left(Temp, I);
  660.   Inc(R);
  661.   IF R > 25 THEN
  662.     R := 1;
  663.   SetCursor(R, 1);
  664.   IF SaveCursor = 0 THEN
  665.      CursorOff;
  666.   IF SaveCursor = 1 THEN
  667.     CursorOn;
  668.   IF SaveSize = 0 THEN
  669.     NormalCursor;
  670.   IF SaveSize = 1 THEN
  671.     HalfCursor;
  672.  
  673. END;
  674.  
  675. PROCEDURE GetTandy11(VAR Tandy11: BOOLEAN);
  676.  
  677. BEGIN
  678.  
  679.   IF GetSystem(12) = 1 THEN
  680.     Tandy11 := True
  681.   ELSE
  682.     Tandy11 := False;
  683.  
  684. END;
  685.  
  686. END.
  687.